﻿using Abp.Application.Services.Dto;
using Mt.Site.Application.Dto;
using Mt.Site.Application.Navigation.Dto;
using Mt.Site.Core.Navigations.Values;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Mt.Site.Application.Navigation
{
    public interface INavigationAppService: IBackEndAppService
    {
        Task<ListResultDto<MenuItemDto>> GetMenuTree();

        /// <summary>
        /// 
        /// </summary>
        /// <param name="input">传入租户id</param>
        /// <returns></returns>
        Task<DropDownSelectionsDto> GetDropDownSelectionsData(EntityDto input);
        Task<MenuItemDto> CreateMenuItem(CreateMenuItemInput input);

        Task<MenuItemDto> GetMenuItem(EntityDto<Guid> input);

        Task<MenuItemDto> UpdateMenuItem(UpdateMenuItemInput input);
        Task MoveMenuItem(MoveMenuItemInput input);
        Task DeleteMenuItem(EntityDto<Guid> input);
        Task<ListResultDto<MenuItemDto>> UpSort(EntityDto<Guid> input);
        Task<ListResultDto<MenuItemDto>> DownSort(EntityDto<Guid> input);

        Task<MenuItemDto> ChangeSortNum(NewSortNumberInput input);

        Task<MenuItemDto> SetActive(EntityDto<Guid> input);
        Task<MenuItemDto> SetInActive(EntityDto<Guid> input);

        Task<StyleAndScriptDto> GetStyleAndScriptConfigAsync(MenuGuidDto input);
        Task SetStyleAndScriptConfigAsync(StyleAndScriptConfigInput input);

        string TranslateToUrl(List<string> pathNames);

        Task<GenerateRouteOutput> RouteBatchGeneration();

        Task<MenuItemDto> CopyMenuAsync(EntityDto<Guid> input);
    }
}
